import UIKit

/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=16

    第16课 inout

        1、inout 关键字
        2、函数类型
        3、函数类型的变量或者常亮 赋值
        
*/

// 1 inout 关键字
func test(params: inout Int) {
    params = params * 2
    print(params)
}

var a1 = 10
print("传递值 a1=" + String(a1))
test(params: &a1) // 传引用、传地址
print("传递值 a1=" + String(a1))

// -----------------------------------------
// 2 函数类型
// 定义a方法，无参数，没有返回值
//var a:() -> Void

// 定义b方法，2个参数，返回值 字符串
//var b:(Int, String) -> String

// c 定义参数是 1个参数 int数组,  返回值是 元组
//let c:([Int]) -> (Int, String)


// 例子
func test1() -> Void {
    print("test1()")
}

var a:() -> Void = test1
a()



var b:() -> Void = {() -> Void in
    print("b()")
}
b()




let c:(String,Int) -> String = {(name: String, age: Int) -> String in
//    print("name=" + name + ", age=", String(age))
    return name + String(age)
}
print( c("srxboys", 18) )



func test3(params: [Int]) -> String {
    var temp:String = ""
    for item in params {
        temp = temp + String(item)
    }
    return temp
}
let e:([Int]) -> String = test3

let eValue = e([1, 2, 3])
print("eValue =>" + eValue)


var f:([Int]) -> String = {(array:[Int]) -> String in
    var temp:String = "_"
    for item in array {
        temp = temp + String(item)
    }
    return temp
}
let fValue = f([4, 5, 6])
print("fValue =>" + fValue)




let g:([Int]) -> String = e
print(g([1,3,5]))

let h:([Int]) -> String = f
print(h([2,4,6]))
